package com.tbit.uqbike.client.dao.core;

import com.tbit.uqbike.client.pojo.Notice;
import com.tbit.uqbike.client.pojo.NoticeAppointAccount;
import com.tbit.uqbike.client.pojo.NoticeAppointPlatform;
import com.tbit.uqbike.client.pojo.NoticeAppointType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 公告表(Notice)表数据库访问层
 *
 * @author shanyong.mo
 * @since 2025-02-18 14:53:31
 */
@Mapper
@Repository
public interface NoticeDao {

    /**
     * @description: 获取用户的公告列表
     * @author: mo.shanyong
     * @date: 2025/2/19 17:20
     * @param: roleIdList 角色id集合
     * @param: phone 用户手机号码
     * @param: userTypeList 用户类型
     * @param: userId 用户id
     * @param: platform 平台：
     * @param: pageNum 页码
     * @param: pageSize 页长
     * @return: java.util.List<com.tbit.uqbike.object.pojo.Notice>
     */
    List<Notice> getUserNoticeList(@Param("userTypeList") List<Integer> userTypeList, @Param("phone") String phone,
                                   @Param("logType") Integer logType, @Param("userId") Integer userId, @Param("platform") Integer platform,
                                   @Param("userAccountIdList") List<Integer> userAccountIdList,
                                   @Param("offset") Integer offset, @Param("pageSize") Integer pageSize);

    /**
     * @description: 查询用户的公告总数
     * @author: mo.shanyong
     * @date: 2025/2/19 18:07
     * @param: userTypeList 用户类型
     * @param: phone 用户手机号码
     * @return: int
     */
    int getUserNoticeCount(@Param("userTypeList") List<Integer> userTypeList, @Param("phone") String phone,
                           @Param("userAccountIdList") List<Integer> userAccountIdList, @Param("platform") Integer platform);

    /**
     * @description: 获取用户位读公告数
     * @author: mo.shanyong
     * @date: 2025/2/24 21:08
     * @param: roleIdList 角色Id
     * @param: phone 用户手机号码
     * @param: logType 日志类型
     * @param: userId 用户id
     * @param: platform 平台
     * @return: Integer
     */
    Integer getUserNotReadNoticeCount(@Param("roleIdList") List<Integer> roleIdList, @Param("phone") String phone,
                                      @Param("logType") Integer logType, @Param("userId") Integer userId, @Param("platform") Integer platform,
                                      @Param("userAccountIdList") List<Integer> userAccountIdList);


    /**
     * 新增数据（判空）
     *
     * @param notice 实例对象
     * @return 影响行数
     */
    int insertCheckNull(Notice notice);


    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<NoticeAppointType> 实例对象列表
     * @return 影响行数
     */
    int insertBatchNoticeType(@Param("entities") List<NoticeAppointType> entities);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<NoticeAppointAccount> 实例对象列表
     * @return 影响行数
     */
    int insertBatchNoticeAccount(@Param("entities") List<NoticeAppointAccount> entities);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<NoticeAppointPlatform> 实例对象列表
     * @return 影响行数
     */
    int insertBatchNoticePlatform(@Param("entities") List<NoticeAppointPlatform> entities);


}

